package com.geekbang.learnthrread;

public class DataHolder {

    private Object lockObj = new Object();

    private long number = 0;
    private static long numberStatic = 0;

    // TODO 一个synchronized解决问题
    // TODO synchronized 关键字用来修饰成员方法, 代表这个方法对于同一个对象来说, 同一时间只允许一个线程执行, 别的线程如果也调用这个实力的方法,
    //      就需要等待已久在执行这个方法的线程执行完毕, 才能进入方法执行
    public synchronized void change(long delta) {
        number += delta;
    }

    public void changeSyncBlock(long delta){
        int abc = 99;
        synchronized (lockObj){
            number += delta;
        }
        int cde = 987;
    }

    // TODO 一个synchronized解决问题
    public synchronized static void changeStatic(long delta) {
        numberStatic += delta;
    }

    public void print() {
        System.out.println("Number=" + number);
    }

    public static void printStatic() {
        System.out.println("static Number=" + numberStatic);
    }

}
